package com.cruise.game.mapper;

import com.cruise.game.model.entity.User;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.List;

/**
 * 用户Mapper接口
 *
 * @author cruise
 * @date 2025-02-28
 */
@Repository
public interface UserMapper extends BaseMapper<User> {

    /**
     * 通过微信openid查询用户
     *
     * @param openid 微信openid
     * @return 用户
     */
    User selectByOpenid(@Param("openid") String openid);

    /**
     * 更新用户余额（增加）
     *
     * @param userId 用户ID
     * @param amount 增加金额
     * @return 影响的行数
     */
    int updateBalance(@Param("userId") Long userId, @Param("amount") BigDecimal amount);

    /**
     * 更新用户余额（减少）
     *
     * @param userId 用户ID
     * @param amount 减少金额
     * @return 影响的行数
     */
    int deductBalance(@Param("userId") Long userId, @Param("amount") BigDecimal amount);

    /**
     * 更新用户状态
     *
     * @param userId 用户ID
     * @param status 状态
     * @return 影响的行数
     */
    int updateStatus(@Param("userId") Long userId, @Param("status") String status);

    /**
     * 统计今日新增用户数
     *
     * @param startTime 开始时间
     * @param endTime   结束时间
     * @return 用户数
     */
    int countTodayNewUsers(@Param("startTime") LocalDateTime startTime, @Param("endTime") LocalDateTime endTime);

    /**
     * 统计用户总数
     *
     * @return 用户总数
     */
    int countTotalUsers();

    /**
     * 统计代理总数
     *
     * @return 代理总数
     */
    int countTotalAgents();

    /**
     * 统计在线用户数
     *
     * @return 在线用户数
     */
    int countOnlineUsers();

    /**
     * 统计用户数量
     *
     * @param role   角色（可选）
     * @param status 状态（可选）
     * @return 用户数量
     */
    int countUsers(@Param("role") String role, @Param("status") String status);

    /**
     * 查询第一个管理员用户
     *
     * @return 管理员用户
     */
    User selectFirstAdminUser();
}